class Solution {
    public int numDistinct(String s, String t) {
        // 创建dp表、初始化、填表、返回值
        int m = s.length(), n = t.length();
        int[][] dp = new int[m+1][n+1]; // 多加一行，多加一列

        // 将 t字符串为空串的情况，全部初始化为1
        // 也就是第一列
        for (int i = 0; i <= m; i++) {
            dp[i][0] = 1;
        }

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                // 不包含s[i]
                dp[i][j] += dp[i-1][j];
                // 包含s[i]，还得看结尾字符是否相等
                if (s.charAt(i-1) == t.charAt(j-1)) {
                    dp[i][j] += dp[i-1][j-1];
                }
            }
        }

        return dp[m][n];
    }
}